home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 722 / 722.xpi / chrome / noscript.jar / content / noscript / URIValidator.js < prev    next >
Text File  |  2010-02-12  |  2KB  |  49 lines

  1. const URIValidator = {
  2.   
  3.   QueryInterface: xpcom_generateQI([CI.nsIObserver, CI.nsISupportsWeakReference, CI.nsISupports]),
  4.   
  5.   // returns false if absolute URI is not valid, undefined if it cannot be validated (i.e. no validator is found for this scheme) 
  6.   validate: function(uriSpec) {
  7.     if (!uriSpec) return false;
  8.     var parts = uriSpec.split(":");
  9.     if (parts.length < 2) return false;
  10.     var scheme = parts.shift().toLowerCase();
  11.     if (!scheme) return false;
  12.     var validator = this.validators[scheme];
  13.     try {
  14.       // using unescape rather than decodeURI for a reason:
  15.       // many external URL (e.g. mailto) default to ISO8859, and we would fail,
  16.       // but on the other hand rules marking as invalid non-null high unicode chars are unlikely (let's hope it) 
  17.       return validator && validator.test(unescape(parts.join(":"))); 
  18.     } catch(e) {
  19.       return false;
  20.     }
  21.   },
  22.   
  23.   get validators() {
  24.     delete this.validators;
  25.     this._init();
  26.     return this.validators;
  27.   },
  28.   
  29.   prefs: null,
  30.   _init: function() {
  31.     this.validators = {};
  32.     this.prefs = CC["@mozilla.org/preferences-service;1"].getService(CI.nsIPrefService)
  33.       .getBranch("noscript.urivalid.").QueryInterface(CI.nsIPrefBranch2);
  34.     for each(var key in this.prefs.getChildList("", {})) {
  35.       this.parseValidator(key);
  36.     }
  37.     this.prefs.addObserver("", this, true);
  38.   },
  39.   parseValidator: function(key) {
  40.     try {
  41.       this.validators[key] = new RegExp("^" + this.prefs.getCharPref(key) + "$");
  42.     } catch(e) {
  43.       delete this.validators[key];
  44.     }
  45.   },
  46.   observe: function(prefs, topic, key) {
  47.     this.parseValidator(key);
  48.   }
  49. };